package com.geek.thread.base;

import org.openjdk.jol.info.ClassLayout;

import java.util.concurrent.TimeUnit;

/**
 * 使用jol查看对象头信息，包括四种锁信息
 */
public class LockInfo {

	public static void main(String[] args) {
		LockInfo obj = new LockInfo();
		obj.test();
	}

	/**
	 * 四种锁的信息
	 * 操作系统：大端模式、小端模式(一般是小端模式，需要把值倒序查看，比如：00000001 00000010 00000100 00001000，真正的值应该是：00001000 00000100 00000010 00000001)
	 * 倒数第三位是偏向锁标志，后两位是锁标志位：
	 *      001：无锁
	 *      000：轻量级锁
	 *      010：重量级锁
	 *      011：GC标记
	 *      101：偏向锁
	 */
	public void test(){
		new Thread(() -> {
			try {
				TimeUnit.SECONDS.sleep(5);
				Object o = new Object();
				System.out.println(ClassLayout.parseInstance(o).toPrintable());
				synchronized (o){
					System.out.println(ClassLayout.parseInstance(o).toPrintable());
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}).start();
	}

}
